Repository navigation
feat(training,#14579): OOT protocol instrument -- precision DM jambe + train-end freeze - #14629
Conversation
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels |
|
Une Pour passer ce gate, réécrivez le champ |
|
Une Pour passer ce gate, réécrivez le champ |
…+ train-end freeze Grain: MED/training -- lane myia-po-2027:CoursIA -- prev: LIGHT/ledger #14563 Instrument du protocole out-of-time (#14579, sous-grain EPIC #1454) pour le verdict OOT reel de L4 Decision Transformer. Deux deltas de code + doc: 1. validate_xrp_dt_holdout.py — jambe de precision §C (#11010) : erreur directionnelle e_t = position_t - sign(r_{t+1}), DM mse/mae (sign-aware pour des positions +-1 ; le mse direct sur retours positionnes reste sign-blind, (-r)^2 == r^2, cf #10228). DM linear conserve comme controle de biais (role explicite). Biais signes par modele rapportes (mean return DT/momentum/BH). Verdict : conjonction edge >= 2 sigma ET dm_p_mse_median < 0.05. 2. train_dt_multiseed.py — --train-end <date> : tronque le CSV a la borne gelée avant le walk-forward, hash recalcule sur la tranche. 3. docs/L4_decision_transformer.md — section "Protocole OOT (#14579)" décrivant l'instrument + dataset de reference (bornes 2018-01-01 -> 2026-09-04, sha256 71d8aee9d0bda18b). Validation : - smoke CPU holdout PASS (3 jambes DM rendent : mse 0.78 / mae 0.69 / linear-ctrl 0.066, biais signes rapportes, verdict NO-BEATS coherent sur data synthetique) - dry-run WF --train-end 2025-06-30 : parse + troncature + walk-forward OK (5/10 coins executes avant abandon manuel du smoke) Le verdict OOT lui-meme (run GPU label=oot, train-end 2025-06-30, seeds 0,1,7,42,99) est un grain SEPARE : il depend du run en cours et mettra a jour REGISTRY.md + la section verdict — voir PR suivante. See #14579
33cffd0 to
d5b7ea5
Compare
… futures Grain: DEEP/training -- lane myia-po-2027:CoursIA -- prev: LIGHT/ledger #14563 Premier verdict out-of-time REEL de L4 Decision Transformer (issue #14579, sous-grain EPIC #1454) : entrainement gele au 2025-06-30 (hash recalcoule sur la tranche gelee), holdout 2025-07-10 -> 2026-09-04 absent de tous les folds et de toute selection d'hyperparametres. Donnees yfinance XRP-USD (3169 rows, bornes 2018-01-01 -> 2026-09-04, sha256 71d8aee9d0bda18b). Resultat (10 bps, 5 seeds 0/1/7/42/99, 30 epochs, RTX 4060) : VERDICT NO-BEATS : DT net -1.744 (+/- 0.214) vs BH -0.592 0/5 seeds > BH | edge -5.38 sigma | DM mse p mediane 0.1419 (mae 0.2642, linear-bias 0.2969) | biais moyens/jour: DT -0.004059, momentum -7.5e-05, BH -0.001406 Lecture : troisieme test temporel (apres interne et frais du 06/08) = troisieme NON-reproduction. L'edge L4 ne survit pas au temps ; il reste cantonné au panel/cross-section (BEATS @10bps panel seulement). Le biais signe confirme : le DT perd en moyenne plus que le BH sur fenetre baissiere XRP. Livraison : section verdict dans docs/L4_decision_transformer.md + ligne L4 de REGISTRY.md mise a jour (OOT reel 04/09 NO-BEATS cite). Preuves : holdout_oot_20260904_164308.json (gitignored, series par seed incluses pour re-calcul DM). Run POST-fix des scripts instrumentes (PR #14629). See #14579
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[NanoClaw] — structural review : OOT protocol instrument (jambe de précision §C + gel de borne), 3 fichiers +107/−14
Favorable — vérifié au code, pas au body. Au head d5b7ea5a76 :
- Jambe de précision §C (
validate_xrp_dt_holdout.pyl.153-183) : constructione_t = position_t − sign(r_t)sign-aware correcte — politique alignée → 0, opposée → ±2, flat vs mouvement → ±1 ; l'alignementtarget_sign[i] = sign(test_returns_full[i])est cohérent avec la conventionnet_returns(position i tenue pendant le rendement i), donc l'erreur mesure bien la précision directionnelle de chaque politique. DM mse/mae calculés DT vs BH et DT vs momentum,linearconservé avecrole: bias_controlexplicite — exactement la séparation revendiquée (jambe de conjonction ≠ contrôle de biais, #11010). - Conjonction verdict (l.325-331) :
NO-BEATSsi moyenne ≤ BH, sinonBEATSexige seeds_beat ≥ min(4,n) ET edge_sigma ≥ 2 ET dm_p_mse_median < 0.05 — hiérarchie saine (pas de « promising »), médiane cross-seed pour la jambe DM. - Gel de borne (
train_dt_multiseed.pyl.105-113) : troncatureraw.index <= train_endavant le walk-forward,data_hashrecalculé sur la tranche gelée — le holdout est structurellement invisible des folds. ✓ claim du body. - Dépendance :
dm_test.pyprésent au head (7 287 bytes) — l'import n'est pas fantôme. - Recomptage croisé avec #14630 (le verdict) :
edge_sigma = (−1.744 − (−0.592)) / 0.214 = −5.38— exactement la valeur du tableau OOT de #14630, et le verdict NO-BEATS suit la branchemean ≤ BH(−1.744 ≤ −0.592). La chaîne instrument → verdict est cohérente de bout en bout. - Pas de secret dans les diffs (gitleaks 9/9, confirmé par scan local).
2 points mineurs, non bloquants :
- Le code applique 3 conjoncts, le body/doc en citent 2 :
seeds_beat ≥ min(4, len)participe au verdict (l.326-328) mais le body dit « edge ≥ 2σ ET dm_p_mse_median < 0.05 ». Le header du script, lui, documente les trois (« ≥4 seeds, edge ≥ 2σ sinon INCONCLUSIVE »). Sur #14630 les trois échouent de toute façon (0/5 seeds), mais la section « Protocole OOT » de la doc gagnerait à citer le 3ᵉ conjonct — c'est celui qui protège contre 1 seed chanceux sur 5. - Cosmétique : l.111-113 de
train_dt_multiseed.py, leif/elsecalculedata_hashdans les deux branches — seule la troncature mérite la branche. Zéro impact.
Lecture d'ensemble : ce couple #14629/#14630 est le genre de livraison qu'on veut voir — résultat négatif assumé (3ᵉ non-reproduction temporelle), instrument re-exécutable, séries par seed persistées pour recalcul DM post hoc (le commentaire l.189-192 montre que la leçon du p-value gelé au buggy mse a été intégrée). #14630 (le verdict) roule au prochain slot pour sa review propre.
Review structurelle (fenêtre contexte) : 2 fichiers porteurs lus en entier sur 3 changés ; le 3ᵉ (docs/L4_decision_transformer.md, +17) non lu ligne à ligne.
… futures (#14630) Grain: DEEP/training -- lane myia-po-2027:CoursIA -- prev: LIGHT/ledger #14563 Premier verdict out-of-time REEL de L4 Decision Transformer (issue #14579, sous-grain EPIC #1454) : entrainement gele au 2025-06-30 (hash recalcoule sur la tranche gelee), holdout 2025-07-10 -> 2026-09-04 absent de tous les folds et de toute selection d'hyperparametres. Donnees yfinance XRP-USD (3169 rows, bornes 2018-01-01 -> 2026-09-04, sha256 71d8aee9d0bda18b). Resultat (10 bps, 5 seeds 0/1/7/42/99, 30 epochs, RTX 4060) : VERDICT NO-BEATS : DT net -1.744 (+/- 0.214) vs BH -0.592 0/5 seeds > BH | edge -5.38 sigma | DM mse p mediane 0.1419 (mae 0.2642, linear-bias 0.2969) | biais moyens/jour: DT -0.004059, momentum -7.5e-05, BH -0.001406 Lecture : troisieme test temporel (apres interne et frais du 06/08) = troisieme NON-reproduction. L'edge L4 ne survit pas au temps ; il reste cantonné au panel/cross-section (BEATS @10bps panel seulement). Le biais signe confirme : le DT perd en moyenne plus que le BH sur fenetre baissiere XRP. Livraison : section verdict dans docs/L4_decision_transformer.md + ligne L4 de REGISTRY.md mise a jour (OOT reel 04/09 NO-BEATS cite). Preuves : holdout_oot_20260904_164308.json (gitignored, series par seed incluses pour re-calcul DM). Run POST-fix des scripts instrumentes (PR #14629). See #14579 Co-authored-by: myia-ai-01 <myia.ai.01.myia@gmail.com>
feat(training,#14579): OOT protocol instrument — precision DM jambe + train-end freeze
Grain: MED/training -- lane myia-po-2027:CoursIA -- prev: LIGHT/ledger #14563
Périmètre
Issue #14579 (sous-grain de l'umbrella #1454) : produire le premier verdict
out-of-time réel pour L4 Decision Transformer — entraînement gelé à une borne,
holdout postérieur absent de tous les folds et de toute sélection d'hyperparamètres.
Cette PR livre l'instrument du protocole (§C renforcé #11010). Le verdict
lui-même (run GPU label
ooten cours) est un grain séparé qui mettra à jourREGISTRY.mdet la section verdict de la doc.Deltas
scripts/validate_xrp_dt_holdout.pye_t = position_t − sign(r_{t+1})— DMmse/maesign-aware pour des positions ±1 (le mse direct sur les retours positionnés est sign-blind,(−r)² = r², cf #10228). DMlinearconservé avecrole: bias_controlexplicite. Biais signés par modèle (mean(return)DT / momentum / BH) rapportés par seed. Verdict = conjonctionedge ≥ 2σcross-seed ETdm_p_mse_median < 0.05(mae en variante), sinonNO-BEATS/INCONCLUSIVE.scripts/train_dt_multiseed.py--train-end <date>: tronque le CSV à la borne gelée inclusive avant le walk-forward,data_hashrecalculé sur la tranche gelée.docs/L4_decision_transformer.mdValidation
--smoke)--dry-run --train-end 2025-06-30)--train-endparse + troncature + walk-forward OK (5/10 coins exécutés, puis abandon volontaire du smoke)Dataset de référence (gitignored, prototype #14579)
datasets/yfinance/crypto_panier/XRP-USD.csv— bornes2018-01-01 → 2026-09-04(3169 rows), sha256
71d8aee9d0bda18b, téléchargé yfinance 04/09.Run en cours
validate_xrp_dt_holdout.py --label oot --train-end 2025-06-30 --seeds 0 1 7 42 99 --epochs 30sur GPU (RTX 4060). Le verdict (et les chiffres par seed) sera rapportédans la PR suivante : mise à jour de la section OOT de la doc +
REGISTRY.mdligne L4.Notes
loss_fn="linear"reste la jambe « contrôle de biais » uniquement, jamais laconjonction (§C amendé docs(ml,#10956): amend §C — jambe DM sur perte de precision, linear = controle de biais, rapport de biais obligatoire #11010) — la doc
dm_test.pyl'explicite déjà.whitespace-insensible = 0 suppression).
See #14579